// 管理用户数据相关
import { defineStore } from "pinia";
import { ref } from "vue";
import { loginAPI } from "@/apis/user";

export const useUserStore = defineStore(
  "user",
  () => {
    // 1.定义管理用户数据的state
    const userInfo = ref({});
    
    // 2.定义管理接口数据的action函数
    const getUserInfo = async ({ account, password }) => {
      try {
        console.log('发送登录请求:', { account, password });
        
        const res = await loginAPI({ account, password });
        
        console.log('收到登录响应:', res);
        
        // 检查响应是否成功 - 更灵活的响应结构处理
        console.log('检查响应:', {
          code: res?.code,
          data: res?.data,
          success: res?.data?.success,
          successType: typeof res?.data?.success,
          message: res?.data?.message || res?.message
        });
        
        // 多种成功条件判断
        const isSuccess = 
          (res?.code === 200 && res?.data) ||  // 标准成功响应
          (res?.data?.success === true) ||     // success字段为true
          (res?.data?.success === 'true') ||   // success字段为字符串'true'
          (res?.data?.token) ||                // 有token字段
          (res?.token);                        // 直接在根级别有token
        
        if (isSuccess) {
          // 登录成功，保存用户信息
          userInfo.value = res.data || res;
          console.log('设置userInfo为:', userInfo.value);
          return res;
        } else {
          // 登录失败，抛出错误
          const errorMsg = res?.data?.message || res?.message || res?.msg || '登录失败';
          console.warn('登录失败:', errorMsg, '完整响应:', res);
          throw new Error(errorMsg);
        }
      } catch (error) {
        console.error('登录出错:', error);
        
        // 处理不同类型的错误
        if (error.response) {
          // 服务器响应了错误状态码
          const errorMsg = error.response.data?.message || 
                          error.response.data?.msg || 
                          `服务器错误: ${error.response.status}`;
          throw new Error(errorMsg);
        } else if (error.request) {
          // 请求已发出但没有收到响应
          throw new Error('网络连接失败，请检查网络或后端服务是否启动');
        } else {
          // 其他错误
          throw new Error(error.message || '登录失败');
        }
      }
    };
    
    // 退出时清空用户信息
    const clearUserInfo = () => {
      userInfo.value = {};
      // cartStore.clearCart();
    };
    
    // 检查用户是否已登录
    const isLoggedIn = () => {
      // 根据实际用户数据结构调整检查条件
      return !!userInfo.value.token;
    };
    
    // 以对象的格式把state和action return
    return {
      userInfo,
      getUserInfo,
      clearUserInfo,
      isLoggedIn
    };
  },
  {
    persist: true, // 保持状态持久化
  }
);